﻿Imports System.Text

Public Class frmVeiculo
    Inherits formPadrao
    Dim Sep As Char = ","
    Dim Nombre As Double
    Public WithEvents ucPreambulo As New ucPreambulo
    Private nomeDiretorio As String = Nothing
    Public WithEvents btnLimpar As System.Windows.Forms.Button
    Private registro As New registroVO
    Private mensagem As String
    Private erroNivel As Integer = 0
    Private regInserido As New registroVO
    Private origemSids As Boolean = False

    Public Property getUcPreambulo() As ucPreambulo
        Get
            Return ucPreambulo

        End Get

        Set(ByVal value As ucPreambulo)
            ucPreambulo = value
        End Set
    End Property


    Public Sub New()
        ' This call is required by the designer.
        InitializeComponent()
        pnlDados.Controls.Add(ucPreambulo)
        If Not DesignMode Then
            Sep = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
            pnlDados.AutoSize = True
        End If
    End Sub

    Private Sub TextboxNumeric_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs)
        Dim nonNumberEntered As Boolean
        nonNumberEntered = True

        If (e.KeyChar >= Convert.ToChar(48) AndAlso e.KeyChar <= Convert.ToChar(57)) OrElse e.KeyChar = Convert.ToChar(8) OrElse e.KeyChar = Convert.ToChar(44) Then
            nonNumberEntered = False
        End If
        If nonNumberEntered = True Then
            e.Handled = True
        Else
            e.Handled = False
        End If
    End Sub


    Private Sub frmAvaliacao_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Try
            Me.WindowState = FormWindowState.Maximized
            generica.redimensionaControle(pnlDados)
            generica.redimensionaControle(pnlItens)
            ucPreambulo.ucPerito.Enabled = True

            ucPreambulo.selecionaIdTipoPericia = ucPreambulo.ID_TIPO_PERICIA
            ucPreambulo.selecionaIdNatureza = ucPreambulo.ID_NATUREZA

            ucPreambulo.pnlNatureza.Enabled = False
            Me.ControlBox = False

            If ucPreambulo.ID_NATUREZA = 65 Then
                ucPreambulo.lblTitulo.Text = "VISTORIA EM VEÍCULO ENVOLVIDO EM OCORRÊNCIA DE TRÂNSITO"

            ElseIf ucPreambulo.ID_NATUREZA = 90 Then
                ucPreambulo.lblTitulo.Text = "VISTORIA EM VEÍCULO ENVOLVIDO EM OCORRÊNCIA DE NATUREZA PATRIMONIAL"

            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub
    '--------------------------------------------------------------------------------------------------------------------------------
    ' FUNÇÃO QUE IRÁ GERAR O LAUDO
    '--------------------------------------------------------------------------------------------------------------------------------
    Private Sub geraLaudo()

        generica.tempo = Now

        Dim oWordTemp As New WordAppl
        Dim registroBo As New registroBO

        '-----------------------------------------------------------------------------------------
        ' RETORNO O NOME DO DIRETORIO A SER CRIADO
        '-----------------------------------------------------------------------------------------
        nomeDiretorio = generica.retornaNomeDiretorio(ucPreambulo.getAno, _
                                                  ucPreambulo.getNumeroLaudo, "VISTORIA VEÍCULO ", ucPreambulo.getIndiciado, ucPreambulo.getVitima)
        '-----------------------------------------------------------------------------------------
        ' ABRE O ARQUIVO WORD
        '-----------------------------------------------------------------------------------------

        '----------------------------------------------------------------------------------
        ' SEPARANDO DADOS EXTRAÍDOS DO SIDS
        '----------------------------------------------------------------------------------

        If registroGlobal.registroPincipal.ID_REGISTRO > 0 Or ucPreambulo.ehNovo Then

            pb.zeraContador()
            pb.stepBarra(10)
            pb.Visible = True
            pb.stepBarra(10)

            Dim placa As String = Nothing

            '-------------------------------------------------------------------------
            ' MONTA DADOS DO VEÍCULO DE ACORDO COM INFORMAÇÕES DO SIDS - VERIFICA SE FOI COLADA OU NAO
            '-------------------------------------------------------------------------

            If txtDados.Text.IndexOf("Impedimento:") > 0 And txtDados.Text.IndexOf("Tipo Pessoa:") > 0 Then
                origemSids = True
            Else
                origemSids = False
            End If

            '-----------------------------------------------------------------------------------------
            ' GRAVA REGISTRO NA BASE DE DADOS
            '-----------------------------------------------------------------------------------------
            pb.stepBarra(10)
            Try
                If generica.gravaBanco Then
                    Dim regBO As New registroBO
                    '------------------------------------------------------------------------------------
                    ' VERFICA SE É UM NOVO REGISTRO OU SE É UM REGISTRO JÁ ARMAZENADO NA BASE DE DADOS
                    '------------------------------------------------------------------------------------
                    pb.stepBarra(10)
                    Dim textoProva As String = String.Empty
                    Dim provas As New StringBuilder

                    If origemSids Then
                        placa = generica.separaTexto("Placa:", "Chassi:", txtDados)
                        placa = placa.Substring(placa.Length - 7)
                        placa = placa.Substring(0, 3) & "-" & placa.Substring(3, 4)
                        provas.Append("VISTORIA VEÍCULO PLACA:").Append(placa)
                    Else
                        provas.Append("VISTORIA VEÍCULO")
                    End If

                    If provas.ToString.Length > 250 Then
                        textoProva = provas.ToString.Substring(0, 250)
                    Else
                        textoProva = provas.ToString
                    End If

                    Dim registroGravado As Integer



                    If registroGlobal.registroPincipal.ID_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO = False Then

                        '-----------------------------------------------------------------------------------------
                        ' RETORNO O NOME DO DIRETORIO A SER CRIADO
                        '-----------------------------------------------------------------------------------------
                        nomeDiretorio = generica.retornaNomeDiretorio(ucPreambulo.getAno, _
                                                                   ucPreambulo.getNumeroLaudo, "VISTORIA DE VEICULO", ucPreambulo.getIndiciado, ucPreambulo.getVitima)

                        registroGravado = regBO.updateRegistro(registroGlobal.registroPincipal, _
                                                               textoProva, ucPreambulo.getIdPeritoSelecionado, _
                                                               nomeDiretorio, ucPreambulo)
                        pb.stepBarra(10)
                        mensagem = (" O laudo n°" & registroGravado & " foi atualizado com sucesso na base de dados. Clique no ícone do WORD para visualizar o laudo.")
                        registroGlobal.registroPincipal = registroBo.getRegistroSimplificado(registroGravado, ucPreambulo.getAno)
                    Else

                        Dim reg As New registroVO
                        Dim ultimo As Integer = regBO.getUltimoRegistro
                        Dim registroTemporario As Integer = 0
                        If ultimo <> ucPreambulo.getNumeroLaudo Then
                            registroTemporario = ucPreambulo.getNumeroLaudo
                            ucPreambulo.getNumeroLaudo = ultimo
                        End If
                        '-----------------------------------------------------------------------------------------
                        ' RETORNO O NOME DO DIRETORIO A SER CRIADO
                        '-----------------------------------------------------------------------------------------
                        nomeDiretorio = generica.retornaNomeDiretorio(ucPreambulo.getAno, _
                                                                   ucPreambulo.getNumeroLaudo, "VISTORIA DE VEICULO", ucPreambulo.getIndiciado, ucPreambulo.getVitima)

                        reg = generica.populaRegistro(ucPreambulo, generica.retornaNomeArquivoCompleto(nomeDiretorio & ".doc", nomeDiretorio), textoProva)
                        registroGravado = regBO.insereRegistro(reg)
                        registroGlobal.registroPincipal = registroBo.getRegistroSimplificado(registroGravado, ucPreambulo.getAno)
                        If registroTemporario = 0 Then
                            mensagem = (" O laudo n°" & registroGlobal.registroPincipal.NUM_REGISTRO & " foi inserido com sucesso na base de dados. Clique no ícone do WORD para visualizar o laudo.")
                        Else
                            mensagem = (" O laudo n°" & ultimo & " foi inserido com sucesso na base de dados. O laudo não foi gravado com o número inicial " & registroTemporario & " pelo fato de outro usuário ter inserido este número de laudo no banco de dados. Clique no ícone do WORD para visualizar o laudo.")
                        End If
                        pb.stepBarra(10)
                    End If

                    '------------------------------------------------------------------------------------
                    ' INSERE DADOS NA TABELA PONTUACAO
                    '------------------------------------------------------------------------------------


                    '------------------------------------------------------------------------------------
                    ' INSERE DADOS NA TABELA PONTUACAO
                    '------------------------------------------------------------------------------------
                    Dim pontuacaobo As New pontuacaoBO
                    Dim pontuacao As New pontuacaoVO
                    Dim i As Integer

                    If ucPreambulo.ehNovo Then
                        With pontuacao
                            .USUARIO = New usuarioVO With {.ID_USUARIO = ucPreambulo.getIdPeritoSelecionado}
                            .REGISTRO = New registroVO With {.ID_REGISTRO = registroGlobal.registroPincipal.ID_REGISTRO}
                            .PONTUACAO = registroGlobal.registroPincipal.NATUREZA.PONTOS_ATENDIMENTO
                            .TIPO_OCORRENCIA = "ATENDIMENTO"
                            .DATA_ALTERACAO = Nothing
                        End With

                        i = pontuacaobo.inserePontuacao(pontuacao)

                    Else
                        i = pontuacaobo.upDatePontuacao(ucPreambulo.getIdPeritoSelecionado, registroGlobal.registroPincipal)
                    End If

                Else
                    mensagem = ("O sistema está configurado para não gravar registros na base de dados do sistema de registro eletrônico. Para habilitar, clique em configurações > Configurar aplicação e marque a opção <<SIM>>>. Apenas o laudo de n° " & ucPreambulo.getNumeroLaudo & " será gerado. Clique no ícono do WORD para visualizar o documento.")
                End If
                '-------------------------------------------------------------------------------------
                ' INSERE DADOS ITENS DA TABELA NA BASE LOCAL
                '-------------------------------------------------------------------------------------


            Catch ex As Exception
                habilita(False, False)
                generica.encerraProcessosWord()
                generica.gravaErro(ex)
                erroNivel = 1
                Exit Sub
            End Try

            Try

                Dim diretorio As String = System.Configuration.ConfigurationManager.AppSettings("dirTemplateword")
                If rdSim.Checked = True Then
                    If rdQuesitoNao.Checked Then
                        oWordTemp.OpenModelo("veiculoAvaliacao.dot")
                    Else
                        oWordTemp.OpenModelo("veiculoAvaliacaoQuesito.dot")
                    End If
                Else
                    If rdQuesitoNao.Checked Then
                        oWordTemp.OpenModelo("veiculo.dot")
                    Else
                        oWordTemp.OpenModelo("veiculoQuesito.dot")
                    End If
                End If

                oWordTemp.SaveAs(nomeDiretorio, nomeDiretorio & ".doc")
                oWordTemp.Quit()
                oWordTemp = Nothing
                '------------------------------------------------------------------------------------------------
                ' CRIA O PREMABULO
                '------------------------------------------------------------------------------------------------
                Dim oWord As New WordAppl
                oWord.Open(nomeDiretorio, nomeDiretorio & ".doc")
                oWord.criaPreambulo(ucPreambulo)
                '------------------------------------------------------------------------------------------------
                ' POPULA DOCUMENTO WORD
                '------------------------------------------------------------------------------------------------
                pb.stepBarra(10)

               

                If origemSids Then

                    Dim marcaModelo As String = generica.separaTexto("Marca/Modelo:", "Cor", txtDados)
                    Dim anof As String = generica.separaTexto("Ano Fabricação:", "Ano Modelo:", txtDados)
                    Dim anoM As String = generica.separaTexto("Ano Modelo:", "Marca/Modelo:", txtDados)
                    Dim chassi As String = generica.separaTexto("Chassi:", "Renavam:", txtDados)
                    Dim cor As String = generica.separaTexto("Cor Predominante:", "Município", txtDados)
                    Dim municipioEmplacamento As String = generica.separaTexto("Emplacamento:", "IPVA", txtDados)
                    Dim proprietario As String = generica.separaTexto("Nome:", "Impedimento:", txtDados)
                    Dim dados As New StringBuilder

                    dados.Append(marcaModelo).Append(", ano do modelo ").Append(anoM).Append(", ano fabricação ").Append(anof)
                    dados.Append(", placa ").Append(placa).Append(", chassi ").Append(chassi).Append(", cor ").Append(cor)
                    dados.Append(", município de emplacamento ").Append(municipioEmplacamento).Append(" e proprietário ").Append(proprietario)
                    oWord.FindAndReplacement("<<dados>>", dados.ToString)

                Else
                    oWord.FindAndReplacement("<<dados>>", txtDados.Text)
                End If

                If rdSim.Checked Then
                    oWord.FindAndReplacement("<<valor>>", String.Format("{0:c}", txtValor.Value))
                    oWord.FindAndReplacement("<<extenso>>", generica.extensoValor(txtValor.Value))
                End If

                'If rdq.Checked Then
                '    oWord.FindAndReplacement("<<textoquesito>>", "QUESITOS/RESPOSTAS AOS QUESITOS")
                '    oWord.FindAndReplacement("<<quesito1>>", "1º) - Houve destruição, inutilização ou deterioração da coisa submetida a exame?")
                '    oWord.FindAndReplacement("<<quesito2>>", "2º) - Qual o meio ou instrumento empregado??")
                '    oWord.FindAndReplacement("<<quesito3>>", "3º) - Houve emprego de substância inflamável ou explosiva?")
                'Else
                '    oWord.FindAndReplacement("<<textoquesito>>", String.Empty)
                '    oWord.FindAndReplacement("<<quesito1>>", String.Empty)
                '    oWord.FindAndReplacement("<<quesito2>>", String.Empty)
                '    oWord.FindAndReplacement("<<quesito3>>", String.Empty)
                'End If

                oWord.criaAssinatura(ucPreambulo)
                oWord.Save()
                oWord.Quit()
                pb.stepBarra(10)

                '-----------------------------------------------------------------------------------------------------------------------
                ' CHAMA ROTINA PARA LIMPAR CAMPOS DO CONTROLE E DO DATAGRID VIEW
                '-----------------------------------------------------------------------------------------------------------------------

            Catch exc As Exception
                generica.encerraProcessosWord()
                generica.gravaErro(exc)
                erroNivel = 2
                Exit Sub
            End Try
        Else

            '----------------------------------------------------------------------------------------------------------------------------
            ' CASO SEJA UM ARQUIVO QUE JÁ SE ENCONTRA CADASTRADO NA BASE DE DADOS
            '----------------------------------------------------------------------------------------------------------------------------
            If registroGlobal.registroPincipal.ID_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO Then
                habilita(False)
                mensagem = ("O laudo n° " & ucPreambulo.getNumeroLaudo & "/" & ucPreambulo.getAno & " já existe registrado na base de dados.Clique no ícone do WORD para visualizar o laudo.")
            Else
                mensagem = ("O laudo n° " & ucPreambulo.getNumeroLaudo & "/" & ucPreambulo.getAno & " não foi encontrado na base de dados.")
            End If
        End If
        MsgBox(mensagem)
    End Sub

    Private Sub habilita(Optional ByVal habilita As Boolean = Nothing, _
                         Optional ByVal painelVeiculo As Boolean = Nothing, _
                         Optional ByVal btnVerWord As Boolean = Nothing, _
                        Optional ByVal verBarra As Boolean = Nothing, _
                        Optional ByVal verNatureza As Boolean = Nothing)


        If Not IsNothing(btnVerWord) Then
            ucPreambulo.btnVerWord.Visible = btnVerWord
        End If
        If Not IsNothing(verNatureza) Then
            ucPreambulo.ucNatureza.Enabled = verNatureza
        End If

        If Not IsNothing(painelVeiculo) Then
            pnlItens.Enabled = painelVeiculo
        End If

        ucPreambulo.btnGeraLaudo.Enabled = habilita
        ucPreambulo.habilitaCampos(habilita)
        ucPreambulo.selecionaIdTipoPericia = ucPreambulo.ID_TIPO_PERICIA
        ucPreambulo.selecionaIdNatureza = ucPreambulo.ID_NATUREZA

        If Not IsNothing(verBarra) Then
            pb.Visible = verBarra
            pb.zeraContador()
        End If
    End Sub

    Private Sub btnGerarLaudo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Dim isOk As Boolean = False
        Try
            If (generica.validaCampos(ucPreambulo)) Then
                geraLaudo()
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub btnLimpa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Try
            ucPreambulo.limparCampos()
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub btnWord_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Try
            If registroGlobal.registroPincipal.NUM_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO Then
                generica.visualizaWord(nomeDiretorio, nomeDiretorio & ".doc")
            Else
                generica.visualizaWord(nomeDiretorio, nomeDiretorio & ".doc")
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub chamaEventoLimpaCampos(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickLimpaCampos
        Try
            generica.limpaControle(grpValor)
            limpaFormulario(grpValor)
            ucPreambulo.populaDados()
            habilita(True, True, False, False, False)

        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub
    Private Sub chamaEventoGeraLaudo(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickGeraLaudo
        Try
            For Each controle In grpValor.Controls
                erro.SetError(controle, String.Empty)
            Next

            'COPIAR ESTE TRECHO
            Dim regBO As New registroBO
            Dim registroVOTemp As New registroVO
            Dim novoRegistro As Integer = 0
            registroVOTemp = regBO.getRegistroSimplificado(ucPreambulo.getNumeroLaudo, ucPreambulo.getAno)

            If registroVOTemp.NUM_REGISTRO > 0 And registroVOTemp.GEROULAUDO And ucPreambulo.ehNovo Then
                novoRegistro = regBO.getUltimoRegistro
                MsgBox("Laundo n° " & registroVOTemp.NUM_REGISTRO & " já foi inserido na base de dados por outro usuário logado no sistema. O laudo será gerado com o número " & novoRegistro)
                ucPreambulo.getNumeroLaudo = novoRegistro

            ElseIf registroVOTemp.NUM_REGISTRO > 0 And registroVOTemp.GEROULAUDO Then
                MsgBox("Laundo n° " & registroVOTemp.NUM_REGISTRO & " já foi atualizado na base de dados por outro usuário logado no sistema.")
                Exit Sub
            End If

            'FIM DO TRECHO


            If (generica.validaCampos(ucPreambulo)) Then
                If validaCampos() Then
                    pb.zeraContador()
                    pb.stepBarra(10)
                    pb.Visible = True
                    generica.salvaPreambulo(ucPreambulo)
                    geraLaudo()
                    If erroNivel > 0 Then
                        If generica.rollBack(registroGlobal.registroPincipal, nomeDiretorio, erroNivel, ucPreambulo.ehNovo, ucPreambulo) Then

                            MsgBox("O sistema recuperou de um erro grave e nenhuma informação foi gravada. Para registrar um novo laudo, clique em novo laudo")
                            erroNivel = 0
                            ucPreambulo.btnLimpaCampos.PerformClick()
                        End If
                    Else
                        habilita(False, False, True, False)
                    End If
                End If
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Function validaCampos() As Boolean

        Dim ok As Boolean = False

        Try
            If txtDados.Text.Equals(String.Empty) Then
                erro.SetError(txtDados, "Campo obrigatório")
                txtDados.Focus()
                Exit Try

            ElseIf rdSim.Checked Then

                If txtValor.Value = 0 Then
                    erro.SetError(txtValor, "Valor deve ser maior do que zero")
                    txtValor.Focus()

                Else
                    ok = True
                End If
                Exit Try
            Else
                ok = True
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
        Return ok

    End Function

    Private Sub chamaEventoVisualizaWord(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickVisualizaWord
        Try
            If registroGlobal.registroPincipal.NUM_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO Then
                generica.visualizaWord("", "", registroGlobal.registroPincipal.NOME_DIRETORIO)
            Else
                generica.visualizaWord(nomeDiretorio, nomeDiretorio & ".doc")
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub
    Private Sub limpaFormulario(ByVal grupo As GroupBox)
        Try
            txtDados.Text = String.Empty
            txtValor.Value = 0
            rdNao.Checked = True
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub
    Private Sub chamaEventoNovoLaudo(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickNovoLaudo
        Try
            ucPreambulo.limparCampos()
            limpaFormulario(grpValor)
            ucPreambulo.populaDados()
            habilita(True, True, False, False, False)
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub


    Public Sub chamaEventoBuscaLaudo(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickBuscaLaudo
        Try

            ucPreambulo.getIdNatureza = ucPreambulo.ID_NATUREZA

            ucPreambulo.buscaDadosLaudo(ucPreambulo, Me.MdiParent)
            If registroGlobal.registroPincipal.ID_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO Then

                habilita(False, False)
            Else
                habilita(True, True)
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub rdNao_CheckedChanged(sender As Object, e As EventArgs) Handles rdNao.CheckedChanged

        If rdNao.Checked Then
            lblValor.Visible = False
            lblValor.Enabled = False
            txtValor.Enabled = False
            txtValor.Visible = False

        Else
            lblValor.Visible = True
            lblValor.Enabled = True
            txtValor.Enabled = True
            txtValor.Visible = True

        End If
    End Sub

    Private Sub rdSim_CheckedChanged(sender As Object, e As EventArgs) Handles rdSim.CheckedChanged

        If rdSim.Checked Then
            lblValor.Visible = True
            lblValor.Enabled = True
            txtValor.Enabled = True
            txtValor.Visible = True
        Else
            lblValor.Visible = False
            lblValor.Enabled = False
            txtValor.Enabled = False
            txtValor.Visible = False
        End If
    End Sub
End Class